home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / games.arc / GEOSYNCH.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  4.5 KB  |  168 lines

  1. 10  ' **********************
  2. 20  ' **     GEOSYNCH     **
  3. 30  ' **********************
  4. 40  '
  5. 50  CLEAR
  6. 60  SCREEN 2
  7. 70  CLS
  8. 80  KEY OFF
  9. 90  OPTION BASE 1
  10. 100  DIM AZIMUTH(360),ELEVATION(360)
  11. 110  DIM VLINE(39)
  12. 120  '
  13. 130  ' Create vertical line for use later
  14. 140  LINE (0,0)-(0,150)
  15. 150  GET (0,0)-(0,150),VLINE
  16. 160  '
  17. 170  ' Define radian and degree conversion functions
  18. 180  DEGREESPERRADIAN = 57.2958
  19. 190  DEF FNRAD(DEGREES) = DEGREES/DEGREESPERRADIAN
  20. 200  DEF FNDEG(RADIANS) = RADIANS*DEGREESPERRADIAN
  21. 210  '
  22. 220  ' Define ARC COS function
  23. 230  DEF FNACS(X) = 1.5708-ATN(X/SQR(1-X*X))
  24. 240  '
  25. 250  ' Get antenna latitude and longitude from user
  26. 260  ' Also ask for output guidance (printer or not)
  27. 270  CLS
  28. 280  LOCATE 3,15
  29. 290  PRINT "* * *  GEOSYNCHRONOUS SATELLITE ANTENNA AIM  * * *"
  30. 300  LOCATE 8,1
  31. 310  PRINT "Latitude (-90 to 90) is positive in the northern hemisphere ...
  32. 320  LOCATE 10,1
  33. 330  INPUT "Enter the latitude of the antenna location ";LATITUDE
  34. 340  LOCATE 13,1
  35. 350  PRINT "Longitude (-180 to 180) is positive in the western hemisphere ..."
  36. 360  LOCATE 15,1
  37. 370  INPUT "Enter the longitude of the antenna location ";LONGITUDE
  38. 380  LOCATE 18,9
  39. 390  PRINT "1.  Screen chart only.
  40. 400  LOCATE 19,9
  41. 410  PRINT "2.  Printed table also. (Must have printer ready).
  42. 420  LOCATE 22,1
  43. 430  PRINT "Press the appropriate number key, '1' or '2' ...
  44. 440  K$ = INKEY$
  45. 450  IF K$ <> "1" AND K$ <> "2" THEN 440
  46. 460  IF K$ = "2" THEN TABLEFLAG = 1 ELSE TABLEFLAG = 0
  47. 470  '
  48. 480  ' Build screen chart
  49. 490  CLS
  50. 500  LOCATE 1,15
  51. 510  PRINT "* * *  GEOSYNCHRONOUS SATELLITE ANTENNA AIM  * * *
  52. 520  LOCATE 6,60
  53. 530  PRINT "Antenna Location";
  54. 540  LOCATE 8,60
  55. 550  PRINT USING "Latitude  ###.##";LATITUDE;
  56. 560  LOCATE 9,60
  57. 570  PRINT USING "longitude ###.##";LONGITUDE;
  58. 580  LOCATE 13,60
  59. 590  PRINT "Satellite";
  60. 600  LOCATE 14,60
  61. 610  PRINT "longitude";
  62. 620  LOCATE 18,60
  63. 630  PRINT "Antenna aim";
  64. 640  LOCATE 20,60
  65. 650  PRINT "Azimuth";
  66. 660  LOCATE 21,60
  67. 670  PRINT "Elevation";
  68. 680  LINE (100,190)-(461,40),,B
  69. 690  LOCATE 25,14
  70. 700  PRINT "Satellite equatorial longitude (-180 to +180)";
  71. 710  '
  72. 720  ' Loop to put 12 words vertically on left
  73. 730  FOR I = 1 TO 12
  74. 740  LOCATE 5+I,1
  75. 750  READ A$
  76. 760  PRINT A$;
  77. 770  NEXT I
  78. 780  DATA Antenna,aiming,curves,"","","",""
  79. 790  DATA Azimuth,-90 to +90,""
  80. 800  DATA Elevation,0 to 90
  81. 810  '
  82. 820  ' Some of the math can be done just once to save time
  83. 830  EARTH = 6367
  84. 840  ORBIT = 42200
  85. 850  EARTH2 = EARTH * EARTH
  86. 860  ORBIT2 = ORBIT * ORBIT
  87. 870  FACTOR = 2 * ORBIT * EARTH * COS(FNRAD(LATITUDE))
  88. 880  SINLAT = SIN(FNRAD(LATITUDE))
  89. 890  '
  90. 900  ' Compute antenna aim for 360 satellite locations
  91. 910  FOR SATLONG = 1 TO 360
  92. 920  PUT (SATLONG+101,40),VLINE,XOR
  93. 930  LONGDIFF = FNRAD(SATLONG - LONGITUDE - 180)
  94. 940  TERM1 = SQR(EARTH2 + ORBIT2 - FACTOR * COS(LONGDIFF))
  95. 950  TERM2 = TERM1 * TERM1
  96. 960  TERM3 = (TERM2 + EARTH2 - ORBIT2) / (2 * TERM1 * EARTH)
  97. 970  TERM4 = TAN(LONGDIFF) / SINLAT
  98. 980  AZIMUTH(SATLONG) = FNDEG(ATN(TAN(LONGDIFF)/SINLAT))
  99. 990  ELEVATION(SATLONG) = FNDEG(FNACS(TERM3)) - 90
  100. 1000  GOSUB 1590
  101. 1010  IF ELEVATION(SATLONG) < 0 THEN 1080
  102. 1020  '(Else plot the points on the chart)
  103. 1030  XP = SATLONG + 100
  104. 1040  YA = -15 * AZIMUTH(SATLONG) / 18 + 115
  105. 1050  YE = -15 * ELEVATION(SATLONG) / 9 + 190
  106. 1060  PSET (XP,YA)
  107. 1070  PSET (XP,YE)
  108. 1080  PUT (SATLONG+101,40),VLINE,XOR  'Erases line but not background
  109. 1090  NEXT SATLONG
  110. 1100  '
  111. 1110  ' Put line at peak elevation point on chart
  112. 1120  LOCATE 2,34
  113. 1130  PRINT SPACE$(11);
  114. 1140  SATLONG = CVI(MKI$(LONGITUDE + 180))
  115. 1150  GOSUB 1590
  116. 1160  PUT (SATLONG+100,40),VLINE,XOR
  117. 1170  IF TABLEFLAG = 0 THEN 1380
  118. 1180  '
  119. 1190  ' Output table to printer
  120. 1200  LPRINT TAB(15)"* * *  GEOSYNCHRONOUS SATELLITE ANTENNA AIM  * * *"
  121. 1210  LPRINT STRING$(2,10)
  122. 1220  LPRINT USING "Antenna latitude  ###.##";LATITUDE
  123. 1230  LPRINT USING "Antenna longitude ###.##";LONGITUDE
  124. 1240  LPRINT STRING$(3,10)
  125. 1250  LPRINT TAB(9)"Satellite"TAB(27)"Antenna"TAB(36)"Antenna"
  126. 1260  LPRINT TAB(9)"Longitude"TAB(27)"Azimuth"TAB(36)"Elevation"
  127. 1270  LPRINT STRING$(80,"-");
  128. 1280  FORMAT$ = SPACE$(10) + "######" + SPACE$(11)
  129. 1290  FORMAT$ = FORMAT$ + "###.##   ###.##"
  130. 1300  FOR LLONG = 1 TO 360
  131. 1310  IF ELEVATION(LLONG) <= 0 THEN 1330
  132. 1320  LPRINT USING FORMAT$;LLONG-180,AZIMUTH(LLONG),ELEVATION(LLONG)
  133. 1330  NEXT LLONG
  134. 1340  LPRINT CHR$(12);
  135. 1350  TABLEFLAG = 0
  136. 1360  '
  137. 1370  ' Manual scroll through screen chart
  138. 1380  LOCATE 4,17
  139. 1390  PRINT "Use '+' or '-' to scroll through chart"
  140. 1400  '
  141. 1410  K$ = INKEY$
  142. 1420  IF K$ <> "" THEN 1460 ELSE GOSUB 1590
  143. 1430  GOTO 1410
  144. 1440  '
  145. 1450  ' Move line left one notch
  146. 1460  IF K$ <> "-" THEN 1530
  147. 1470  PUT (SATLONG+100,40),VLINE,XOR
  148. 1480  SATLONG = SATLONG - 1
  149. 1490  IF SATLONG < 1 THEN SATLONG = 360
  150. 1500  GOTO 1160
  151. 1510  '
  152. 1520  ' Move line right one notch
  153. 1530  IF K$ <> "+" THEN 1410
  154. 1540  PUT (SATLONG+100,40),VLINE,XOR
  155. 1550  SATLONG = SATLONG MOD 360 + 1
  156. 1560  GOTO 1160
  157. 1570  '
  158. 1580  ' Subroutine to update numbers on screen
  159. 1590  LOCATE 14,72
  160. 1600  PRINT USING "####";SATLONG - 180
  161. 1610  LOCATE 20,70
  162. 1620  IF ELEVATION(SATLONG) >= 0 THEN PRINT USING "###.##";AZIMUTH(SATLONG);
  163. 1630  IF ELEVATION(SATLONG) < 0 THEN PRINT "------";
  164. 1640  LOCATE 21,70
  165. 1650  IF ELEVATION(SATLONG) >= 0 THEN PRINT USING "###.##";ELEVATION(SATLONG);
  166. 1660  IF ELEVATION(SATLONG) < 0 THEN PRINT "------";
  167. 1670  RETURN
  168.